﻿//-------------------------------------------------------------------
//	Copyright (c) 2012 Fedotov I.V.
//	All rights reserved.
//-------------------------------------------------------------------
/*
	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU Lesser General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
	GNU Lesser General Public License for more details.

	You should have received a copy of the GNU Lesser General Public License
	along with this program. If not, see http://www.gnu.org/licenses/.

	Project SVN page 
*/

#ifndef __CONTAINERS_COMMON_H__
#define __CONTAINERS_COMMON_H__

#include <stdio.h>
#include <string.h>
#include <vector>
#include <map>

#include "filecontainer.h"
#include "../sptr.h"
#include "../uniq_id.h"


class ResManager;
/*
class UString;
class LangPairString;
class LangSelector;
class LangString;
*/

//Функция для упрощения добавления функций поиска объектов с разными типами
//Функции проверки и поиска объекта по идентификатору
//Проверяет совпадает ли элемент со идентификатором. В случае не совпадения
//ищет его в ResourseManager. Если не найден, возвращает отрицательное число.
//К *outVal приравнивается найденный элемент, если не найден, то с *outVal ничего не делается
//Возвращает 0 если нет ошибок и отрицательное число, если элемент не найден
template <class T> int checkAndSet_T_AtID(SPtr<T> *(ResManager::*getTAtID)(__int64), SPtr<T> *outVal, __int64 _id){
	if(getTAtID==NULL)return -1;
	if(outVal==NULL)return -2;
	SPtr<T> *ptr;
	if((*outVal).p()->getID()!=_id){
	  if((ptr=(_global.RM.*getTAtID)(_id))!=NULL)
		  (*outVal)=*ptr; else return -3;
	}
  return 0;
}

/*
//Функции проверки и поиска объекта по идентификатору
//Проверяет совпадает ли элемент со идентификатором. В случае не совпадения
//ищет его в ResourseManager. Если не найден, возвращает отрицательное число.
//К *outVal приравнивается найденный элемент, если не найден, то с *outVal ничего не делается
//Возвращает 0 если нет ошибок и отрицательное число, если элемент не найден
int checkAndSet_UString_AtID(SPtr<UString> *outVal, __int64 _id);
int checkAndSet_LangPairString_AtID(SPtr<LangPairString> *outVal, __int64 _id);
int checkAndSet_LangSelector_AtID(SPtr<LangSelector> *outVal, __int64 _id);
int checkAndSet_LangString_AtID(SPtr<LangString> *outVal, __int64 _id);
*/

#endif